{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Chapter 6 - Evolutionary Algorithms\n",
    "### Deep Reinforcement Learning *in Action*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 6.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import random\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "alphabet = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,.! \" #A\n",
    "target = \"Hello World!\" #B\n",
    "\n",
    "class Individual: #C\n",
    "    def __init__(self, string, fitness=0):\n",
    "        self.string = string\n",
    "        self.fitness = fitness\n",
    "\n",
    "from difflib import SequenceMatcher\n",
    "\n",
    "def similar(a, b): #D\n",
    "    return SequenceMatcher(None, a, b).ratio()\n",
    "\n",
    "def spawn_population(length=26,size=100): #E\n",
    "    pop = []\n",
    "    for i in range(size):\n",
    "        string = ''.join(random.choices(alphabet,k=length))\n",
    "        individual = Individual(string)\n",
    "        pop.append(individual)\n",
    "    return pop\n",
    "\n",
    "#A This is the list of characters we sample from to produce random strings\n",
    "#B This is the string we’re trying to evolve from a random population\n",
    "#C We set up a simple class to store information about each member of the population\n",
    "#D This method will compute a similarity metric between two strings, giving us a fitness score\n",
    "#E This method will produce an initial random population of strings"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 6.2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def recombine(p1_, p2_): #A\n",
    "    p1 = p1_.string\n",
    "    p2 = p2_.string\n",
    "    child1 = []\n",
    "    child2 = []\n",
    "    cross_pt = random.randint(0,len(p1))\n",
    "    child1.extend(p1[0:cross_pt])\n",
    "    child1.extend(p2[cross_pt:])\n",
    "    child2.extend(p2[0:cross_pt])\n",
    "    child2.extend(p1[cross_pt:])\n",
    "    c1 = Individual(''.join(child1))\n",
    "    c2 = Individual(''.join(child2))\n",
    "    return c1, c2\n",
    "\n",
    "def mutate(x, mut_rate=0.01): #B\n",
    "    new_x_ = []\n",
    "    for char in x.string:\n",
    "        if random.random() < mut_rate:\n",
    "            new_x_.extend(random.choices(alphabet,k=1))\n",
    "        else:\n",
    "            new_x_.append(char)\n",
    "    new_x = Individual(''.join(new_x_))\n",
    "    return new_x\n",
    "\n",
    "#A This function recombines two parent strings into two new offspring\n",
    "#B This function will mutate a string by randomly flipping characters"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 6.3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def evaluate_population(pop, target): #A\n",
    "    avg_fit = 0\n",
    "    for i in range(len(pop)):\n",
    "        fit = similar(pop[i].string, target)\n",
    "        pop[i].fitness = fit\n",
    "        avg_fit += fit\n",
    "    avg_fit /= len(pop)\n",
    "    return pop, avg_fit\n",
    "\n",
    "def next_generation(pop, size=100, length=26, mut_rate=0.01): #B\n",
    "    new_pop = []\n",
    "    while len(new_pop) < size:\n",
    "        parents = random.choices(pop,k=2, weights=[x.fitness for x in pop])\n",
    "        offspring_ = recombine(parents[0],parents[1])\n",
    "        child1 = mutate(offspring_[0], mut_rate=mut_rate)\n",
    "        child2 = mutate(offspring_[1], mut_rate=mut_rate)\n",
    "        offspring = [child1, child2]\n",
    "        new_pop.extend(offspring)\n",
    "    return new_pop\n",
    "\n",
    "#A This function assigns a fitness score to each individual in the population\n",
    "#B This function generates a new generation by recombination and mutation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 6.4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_generations = 150\n",
    "population_size = 900\n",
    "str_len = len(target)\n",
    "mutation_rate = 0.00001 #A\n",
    "\n",
    "pop_fit = []\n",
    "pop = spawn_population(size=population_size, length=str_len) #B\n",
    "done = False\n",
    "for gen in range(num_generations):\n",
    "    pop, avg_fit = evaluate_population(pop, target)\n",
    "    pop_fit.append(avg_fit) #C\n",
    "    new_pop = next_generation(pop, \\\n",
    "        size=population_size, length=str_len, mut_rate=mutation_rate)\n",
    "    pop = new_pop\n",
    "    for x in pop: \n",
    "        if x.string == target: \n",
    "            print(\"Target Found!\")\n",
    "            done = True\n",
    "    if done:\n",
    "        break\n",
    "#A Set the mutation rate to 0.1%\n",
    "#B Create the initial random population\n",
    "#C Record population average fitness over training time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Hllo World!D'"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pop.sort(key=lambda x: x.fitness, reverse=True) #sort in place, highest fitness first\n",
    "pop[0].string"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f913642a890>]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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AAAA03jsEv32gEv0gbahur5R17+8XMt2lSkiyE//vulMJtEDAACATzLlEn0AaA019U7d+MoKLdtVpvBAP71+YxblHgAAAJCHL9H/qYaGBu3atUtlZWWqr6/XOeecczrfDoCPq21w6ubXVmjJzgMKC/TTqzdmamBqlNmxAAAAgDbhtBT8r7/+Wk888YQWLFig2tpaSZLFYlFjY2OTcf/85z+1evVqpaSktPkZ9AGYq7bBqf97PVeLt5cqNMCmV28YqiGdmp/fAwAAAGiPPFrwXS6XJk+erOeff17SoUfkHUtcXJz+9a9/yWq1auLEiercubMn4wDwEYZh6M63V2nh1hIF+9v08qRMpXfuYHYsAAAAoE3x6D34d911l5577jkZhqHw8HBdc801uuyyy446fuzYsYqIiJBhGProo488GQWAD3knd68+31CkAD+rXrp+qDK7UO4BAACAn/JYwc/NzdUzzzwji8Wi0aNHa+fOnfr3v/+t8ePHH3Ubf39/ZWdnyzAMLVy40FNRAPiQQnut/vzxRknS787rqWHdYkxOBAAAALRNHiv4zz33nCQpISFBc+fOVYcOLTvDNmTIEEnSxo0bPRUFgI8wDEN/nLtOFbWNGpgapZtGdDU7EgAAANBmeazgL1q0SBaLRddff73Cw8NbvF1qaqokqaCgwFNRAPiI91cW6OvNxQqwWfX4FQNks1rMjgQAAAC0WR4r+IcL+oABA05ou5CQEElSdXW1p6IA8AHFjlo9+NEGSdJd5/VQj4SW/+IQAAAAaI88VvAPz5hvtZ7YLh0OhySd0Fl/AL7t8KX5jtpGDUiJ1C1cmg8AAAAcl8cKflxcnCRpz549J7TdmjVrJElJSUmeigLAy/139T59talY/jaLHrtioPxsHn3gBwAAAOCTPPZT89ChQ2UYhj755JMWb9PY2Kh3331XFotFw4cP91QUAF6suKJWD/xwaf5vRvdQr0Su7gEAAABawmMFf+zYsZKkb775Rp9++mmLtrnvvvu0b98+SdKVV17pqSgAvFRNvVOT/71S5dUN6psUoVtHdTM7EgAAAOA1PFbwr776avXq1UuGYWjcuHF66623jjq2pKREt912mx599FFZLBZlZWUpOzvbU1EAeKEGp0uT31yp5bsPKjzIT38fN0j+XJoPAAAAtJjFODw7ngesX79eZ511lioqKmSxWJSc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5syZowULFqixsVE33nijMjMz1a1bt2b3c++99+rhhx+WJIWGhuqKK67QsGHDFBMTo7KyMuXk5Oi9997TwYMH9ctf/lJff/21RowYcczPeu2112rRokXq27evrrnmGnXr1k0VFRVauHBhk3HV1dUKDQ3VqFGjlJ6eri5duig8PFxVVVXatGmT3nnnHe3YsUPfffedLr30Ui1atEh+fv/7saVfv36aO3eu1q9fr/vuu0+SNG7cOF199dVHZIqPjz9m5p9au3atzj33XFVVVUmS+vTpo/Hjx6tLly4qKyvTBx98oC+++ELV1dW68cYbZRiGbrzxxmPuc968eXr33XcVEhKiyZMna+jQoQoMDNTq1as1e/Zs2e12LVmyRL///e/1/PPPH7H9M888o+eee06SFB4eriuuuELp6emKi4tTfX299u7dqxUrVuirr746oc8KAPAxZv+GAQAAM1VWVhpWq9V99rOgoMCj+589e7Z73xdddJFx8ODBZse999577jP8Z511VrNjDp/BP/z6+9//3uy4m266yT3mjjvuaHbMZ599ZlgsFkOSceaZZxp79+5tdtzixYuN8PBwQ5KRlpZmNDQ0HDHmp1cSTJ482WhsbGx2f4d9+eWXRlVV1VHXNzQ0GJMnT3bv8/XXX292XEvPyLd0vNPpNPr16+cec9NNNzX7mf/1r3+5//2FhIQ0uUrgsB+fwZdk9O3bt9l/z5s2bTLCwsIMSYa/v3+zVyz07dv3/9u7/5iq6j+O40/0YsSPvBBOLNYV5pxuypIfZTqljR+XzLZMV6wtWavFkjYZlLW5JbNZoqHFX246jFarLDV1LlGTlnARGhjgxByIowaKcEdApAO9/cE432vce6D4Yd/L67GxHe/5nPd5n3MZ833O54fRm+Lq1ater+/PP/90nTt3zvwmiIiIz9IYfBERmdKuXbtmjPMOCAjgoYceGrfYt27dMtZoX7hwId988w1Wq9Vj2+eee45NmzYBUF5eTmVlpWns9evXk52d7XHfzp07CQgIAOC7777z2Gbz5s24XC5mzZrF8ePHefjhhz22W758OQUFBcDgmvMHDx40zSs2NpbCwkKmT59u2i45OZnAwECv+y0WCx999JEx30BxcbFpvPFy/PhxLly4AEBMTAx79uy5q+fAkFdeeYXMzExgsDfCxx9/bBrXYrFw6NAhj/d5wYIF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",
      "text/plain": [
       "<Figure size 1200x700 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(12,7))\n",
    "plt.xlabel(\"Generations\",fontsize=22)\n",
    "plt.ylabel(\"Fitness\",fontsize=22)\n",
    "plt.plot(pop_fit)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 6.5\n",
    "CartPole Example"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Total number of parameters: $4*25 + 25 + 10*25 + 10 + 2*10 + 2 = 407$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "def model(x,unpacked_params):\n",
    "    l1,b1,l2,b2,l3,b3 = unpacked_params #A\n",
    "    y = torch.nn.functional.linear(x,l1,b1) #B\n",
    "    y = torch.relu(y) #C\n",
    "    y = torch.nn.functional.linear(y,l2,b2)\n",
    "    y = torch.relu(y)\n",
    "    y = torch.nn.functional.linear(y,l3,b3)\n",
    "    y = torch.log_softmax(y,dim=0) #D\n",
    "    return y\n",
    "\n",
    "#A Unpack the parameter vector into individual layer matrices\n",
    "#B Simple linear layer with bias\n",
    "#C Rectified linear unit activation function\n",
    "#D The last layer will output log-probabilities over actions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 6.6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def unpack_params(params, layers=[(25,4),(10,25),(2,10)]): #A\n",
    "    unpacked_params = [] #B\n",
    "    e = 0\n",
    "    for i,l in enumerate(layers): #C\n",
    "        s,e = e,e+np.prod(l)\n",
    "        weights = params[s:e].view(l) #D\n",
    "        s,e = e,e+l[0]\n",
    "        bias = params[s:e]\n",
    "        unpacked_params.extend([weights,bias]) #E\n",
    "    return unpacked_params\n",
    "\n",
    "#A The `layers` parameter specifies the shape of each layer matrix\n",
    "#B Store each individual layer tensor\n",
    "#C Iterate through each layer\n",
    "#D Unpack the indivudal layer into matrix form\n",
    "#E Add the unpacked tensor to the list"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 6.7"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "def spawn_population(N=50,size=407): #A\n",
    "    pop = []\n",
    "    for i in range(N):\n",
    "        vec = torch.randn(size) / 2.0 #B\n",
    "        fit = 0\n",
    "        p = {'params':vec, 'fitness':fit} #C\n",
    "        pop.append(p)\n",
    "    return pop\n",
    "\n",
    "#A `N` is the number of individuals in the population, `size` is the length of the parameter vectors\n",
    "#B Create a randomly initialized parameter vector\n",
    "#C Create a dictionary to store the parameter vector and its associated fitness score"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 6.8"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "def recombine(x1,x2): #A\n",
    "    x1 = x1['params'] #B\n",
    "    x2 = x2['params']\n",
    "    l = x1.shape[0]\n",
    "    split_pt = np.random.randint(l) #C\n",
    "    child1 = torch.zeros(l)\n",
    "    child2 = torch.zeros(l)\n",
    "    child1[0:split_pt] = x1[0:split_pt] #D\n",
    "    child1[split_pt:] = x2[split_pt:]\n",
    "    child2[0:split_pt] = x2[0:split_pt]\n",
    "    child2[split_pt:] = x1[split_pt:]\n",
    "    c1 = {'params':child1, 'fitness': 0.0} #E\n",
    "    c2 = {'params':child2, 'fitness': 0.0}\n",
    "    return c1, c2\n",
    "\n",
    "#A x1 and x2 are agents which are dictionaries\n",
    "#B Extract just the parameter vector\n",
    "#C Randomly produce a split or crossover point\n",
    "#D The first child is produced by taking the first segment of parent 1 and the second segment of parent 2\n",
    "#E Create new children agents by packaging the new parameter vectors into dictionaries"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 6.9"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "def mutate(x, rate=0.01): #A\n",
    "    x_ = x['params']\n",
    "    num_to_change = int(rate * x_.shape[0]) #B\n",
    "    idx = np.random.randint(low=0,high=x_.shape[0],size=(num_to_change,))\n",
    "    x_[idx] = torch.randn(num_to_change) / 10.0 #C\n",
    "    x['params'] = x_\n",
    "    return x\n",
    "\n",
    "#A `rate` is the mutation rate where 0.01 is a 1% mutation rate\n",
    "#B Use the mutation rate to decide how many elements in the parameter vector to mutate\n",
    "#C Randomly reset the selected elements in the parameter vector"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 6.10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/don/git/DeepReinforcementLearningInAction/venv/lib/python3.10/site-packages/gym/envs/registration.py:307: DeprecationWarning: The package name gym_minigrid has been deprecated in favor of minigrid. Please uninstall gym_minigrid and install minigrid with `pip install minigrid`. Future releases will be maintained under the new package name minigrid.\n",
      "  fn()\n"
     ]
    }
   ],
   "source": [
    "import gymnasium as gym\n",
    "env = gym.make(\"CartPole-v1\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "def test_model(agent):\n",
    "    done = False\n",
    "    s = env.reset()[0]\n",
    "    state = torch.from_numpy(s).float()\n",
    "    score = 0\n",
    "    while not done: #A\n",
    "        params = unpack_params(agent['params'])\n",
    "        probs = model(state,params) #B\n",
    "        action = torch.distributions.Categorical(probs=probs).sample() #C\n",
    "        state_, reward, done, _, info = env.step(action.item())\n",
    "        state = torch.from_numpy(state_).float()\n",
    "        score += 1 #D\n",
    "    return score\n",
    "\n",
    "#A While game is not lost\n",
    "#B Get the action probabilities from the model using the agent's parameter vector\n",
    "#C Probabilistically select an action by sampling from a categorical distribution\n",
    "#D Keep track of the number of time steps the game is not lost as the score"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 6.11"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "def evaluate_population(pop):\n",
    "    tot_fit = 0 #A\n",
    "    lp = len(pop)\n",
    "    for agent in pop: #B\n",
    "        score = test_model(agent) #C\n",
    "        agent['fitness'] = score #D\n",
    "        tot_fit += score\n",
    "    avg_fit = tot_fit / lp\n",
    "    return pop, avg_fit\n",
    "\n",
    "#A Total fitness for this population; used to later calculate the average fitness of the population\n",
    "#B Iterate through each agent in the population\n",
    "#C Run the agent in the environment to assess its fitness\n",
    "#D Store the fitness value"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 6.12"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "def next_generation(pop,mut_rate=0.001,tournament_size=0.2):\n",
    "    new_pop = []\n",
    "    lp = len(pop)\n",
    "    while len(new_pop) < len(pop): #A\n",
    "        rids = np.random.randint(low=0,high=lp,size=(int(tournament_size*lp))) #B\n",
    "        batch = np.array([[i,x['fitness']] for (i,x) in enumerate(pop) if i in rids]) #C\n",
    "        scores = batch[batch[:, 1].argsort()] #D\n",
    "        i0, i1 = int(scores[-1][0]),int(scores[-2][0]) #E\n",
    "        parent0,parent1 = pop[i0],pop[i1]\n",
    "        offspring_ = recombine(parent0,parent1) #F\n",
    "        child1 = mutate(offspring_[0], rate=mut_rate) #G\n",
    "        child2 = mutate(offspring_[1], rate=mut_rate)\n",
    "        offspring = [child1, child2]\n",
    "        new_pop.extend(offspring)\n",
    "    return new_pop\n",
    "\n",
    "#A While the new population is not full\n",
    "#B Select a percentage of the full population as a subset\n",
    "#C Subset the population to get a batch of agents and match each one with their index value in the original population\n",
    "#D Sort this batch in increasing order of score\n",
    "#E The last agents in the sorted batch are the agents with the highest scores; select the top 2 as parents\n",
    "#F Recombine the parents to get offspring\n",
    "#G Mutate the children before putting them into the next generation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 6.13"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_generations = 20 #A\n",
    "population_size = 500 #B\n",
    "mutation_rate = 0.01\n",
    "pop_fit = []\n",
    "pop = spawn_population(N=population_size,size=407) #C\n",
    "for i in range(num_generations):\n",
    "    pop, avg_fit = evaluate_population(pop) #D\n",
    "    pop_fit.append(avg_fit)\n",
    "    pop = next_generation(pop, mut_rate=mutation_rate,tournament_size=0.2) #E\n",
    "    \n",
    "#A The number of generations to evolve\n",
    "#B The number of individuals in each generation\n",
    "#C Initialize a population\n",
    "#D Evaluate the fitness of each agent in the population\n",
    "#E Populate the next generation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "def running_mean(x,n=5):\n",
    "    conv = np.ones(n)\n",
    "    y = np.zeros(x.shape[0]-n)\n",
    "    for i in range(x.shape[0]-n):\n",
    "        y[i] = (conv @ x[i:i+n]) / n\n",
    "    return y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f9086d7a080>]"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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7WW/adOmWrdunW644YYKy74kdezYUTNmzNDq1avVtm3b6ogKAABQLgo/AAB/cuTIEb333nuSJBcXF33zzTdq1KjReR2je/fuuuOOOyrcZ9++fXr88cfVrVs3hYaGysPDQ+Hh4briiiv09ttvKz8/v8LHR0dHy2KxKDo6WlLpegMzZsxQ//79FR4eLi8vLzVu3Fhjx45VXFxcpbOnpKToueeeU9++fRURESEPDw/Vr19fvXv31gsvvKATJ05U+PjLL7/cvvL96VyfffaZhgwZooYNG8rd3d2+7bSSkhItWLBAjz76qC677DJFRkbKw8NDvr6+io6O1g033KAffvhBNput3Oc8vdp+//797fc9++yz9hxnfh04cOAvj6vMKv0nT57Uu+++qyuvvNKeLyQkRN26ddOTTz6ppKSkCh8/Y8YM+3OdXlhw9+7duu+++9SyZUv5+PgoKChIvXr10ttvv62ioqIKjydJy5cv15133qnWrVvL399f7u7uCgsLU5s2bTRkyBA9//zz2r179zmPAwBwUgYAACjj8ccfNyQZkoyrr77a4ce3Wq3GE088Ybi5udmfp7yvhg0bGhs2bDjrcZo0aWJIMpo0aWIcP37cuOyyy856LDc3N+Orr746Z7a3337b8PHxqTBXvXr1jLlz5571GGfmyMjIMC699NJyj3Om/v37V/icp7969+5tpKSk/OU5Fy9eXKnHSzISExPLfdzTTz991te0bt06o1GjRhUe18fHx/jvf/971mN88skn9n0/+eQT47PPPjO8vb3PerxevXoZWVlZ5R7LarUa99xzT6Ve77Bhw86aCQDg3JjDDwDAn5y5SN/YsWMdfvxx48bpiy++kCQFBwfrpptuUpcuXRQQEKC0tDT99ttvmjNnjo4cOaL+/ftrw4YNatmy5VmPV1JSolGjRmnp0qXq1auXRo0apUaNGikjI0PffvutlixZopKSEo0fP17du3dXs2bNyj3Ok08+qRdffFGS5Ovrq+uvv169evVSSEiIMjIytGjRIv344486ceKEhg8frt9//139+vWr8LWOGTNGy5YtU9u2bTV69Gg1a9ZMOTk5Wrp0aZn98vPz5evrq8svv1xdunRRTEyM/P39lZeXp4SEBH3//ffat2+fVq1apeuuu07Lli2Tm9sfH2NiY2M1c+ZMxcfHa8qUKZKkm266STfffPNf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",
      "text/plain": [
       "<Figure size 1200x700 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(12,7))\n",
    "plt.xlabel(\"Generations\",fontsize=22)\n",
    "plt.ylabel(\"Score\",fontsize=22)\n",
    "plt.plot(running_mean(np.array(pop_fit),3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "156"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_model(pop[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/tmp/ipykernel_42851/1617347242.py:6: RuntimeWarning: divide by zero encountered in log\n",
      "  y = np.log(x)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f68be8059f0>]"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1500x700 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(15,7))\n",
    "plt.axis('off')\n",
    "plt.xlabel(\"Compute resources\",fontsize=22)\n",
    "plt.ylabel(\"Performance\",fontsize=22)\n",
    "x = np.linspace(0,100,1000)\n",
    "y = np.log(x)\n",
    "plt.plot(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
